/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.util.Date;
import java.util.List;
import model.Evento;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Silvita
 */
public class EventoDAO {
    
    /**
     * Permite obtener todos los eventos que están registrados.
     * @return {@code List<Evento>} lista de toda la información de todos los eventos registrados.
     * @throws HibernateException {@code HibernateException} si no se pudo conectar u obtener datos de la base.
     * @throws Exception {@code HibernateException} si no se pudo conectar u obtener datos de la base.
     */
    public List<Evento> obtenerEventos() throws HibernateException, Exception{ 
        List<Evento> eventos =null;
        MyFactory mf = new MyFactory();
        Session ses = mf.getSf().openSession(); 
        try { 
            ses = mf.getSf().openSession(); 
            eventos = ses.createCriteria(Evento.class).list();
        }catch(Exception e){
            throw new Exception("Error: " + e.getMessage());
        }
        finally{
            ses.close();
            mf.getSf().close();
        }
        return eventos; 
    }
    
    public boolean guardarEvento(Evento event, String usuActivo) throws Exception{
        
        boolean resp=false;
        MyFactory mf = new MyFactory();
        Session s = mf.getSf().openSession();
        try{
            Transaction tx = s.beginTransaction();
            event.setUsuCreacionEvento(usuActivo);
            event.setFecCreacionEvento(new Date()); //new Date()
            event.setUsuModifEvento(usuActivo);
            event.setFecModifEvento(new Date());
            event.setActivo(true);
            s.save(event);
            tx.commit();
            resp=true;
        }
        catch(Exception e){
            throw new Exception("Error: " + e.getMessage());
        }  
        finally{
            s.close();
            mf.getSf().close();
        }
        
        return resp;
    }
    
    public boolean modificarEvento(Evento event, String usuActivo,int id) throws Exception{
        
        boolean resp=false;
        MyFactory mf = new MyFactory();
        Session s = mf.getSf().openSession();
        try{
            Transaction tx = s.beginTransaction();
            event.setIdEvento(id); 
            event.setUsuModifEvento(usuActivo);
            event.setFecModifEvento(new Date());
            event.setActivo(true);
            s.update(event);
            tx.commit();
            resp=true;
        }
        catch(Exception e){
            throw new Exception("Error: " + e.getMessage());
        }  
        finally{
            s.close();
            mf.getSf().close();
        }
        
        return resp;
    }
    
     public boolean eliminarEvento(int id) throws Exception{
        
        boolean resp=false;
        MyFactory mf = new MyFactory();
        Session s = mf.getSf().openSession();
        try{
            Evento evento = (Evento) s.createCriteria(Evento.class).add(Restrictions.eq("idEvento", new Integer(id))).uniqueResult();
            Transaction tx = s.beginTransaction();
            s.delete(evento);
            tx.commit();
            resp=true;
        }
        catch(Exception e){
            throw new Exception("Error: " + e.getMessage());
        }  
        finally{
            s.close();
            mf.getSf().close();
        }
        
        return resp;
         
        /*boolean resp=false;
        MyFactory mf = new MyFactory();
        Session s = mf.getSf().openSession();
        try{
            Transaction tx = s.beginTransaction();
            event.setIdEvento(id); 
            event.setUsuModifEvento(usuActivo);
            event.setFecModifEvento(new Date());
            event.setActivo(false);
            s.update(event);
            tx.commit();
            resp=true;
        }
        catch(Exception e){
            throw new Exception("Error: " + e.getMessage());
        }  
        finally{
            s.close();
            mf.getSf().close();
        }
        
        return resp;*/
    }
    
}
